/*
    双向广搜

    前置知识: 
    讲解038-经典递归过程解析
    讲解043-根据数据量猜解法
    讲解062-宽度优先遍历及其扩展
    讲解059~讲解065都是【必备】课程有关图的内容，建议从头开始学习

    双向广搜常见用途1：小优化
    bfs的剪枝策略，分两侧展开分支，哪侧数量少就从哪侧展开

    双向广搜常见用途2：重要！本体！用于解决特征很明显的一类问题
    特征：全量样本不允许递归完全展开，但是半量样本可以完全展开
    过程：把数据分成两部分，每部分 各自展开 计算结果，然后设计两部分结果的 整合逻辑

    ================================================

    题目1
    单词接龙
    字典 wordList 中从单词 beginWord 和 endWord 的 转换序列
    是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> ... -> sk ：
    每一对相邻的单词只差一个字母。
    对于 1 <= i <= k 时，每个 si 都在 wordList 中
    注意， beginWord 不需要在 wordList 中。sk == endWord
    给你两个单词 beginWord 和 endWord 和一个字典 wordList
    返回 从 beginWord 到 endWord 的 最短转换序列 中的 单词数目
    如果不存在这样的转换序列，返回 0 。
    测试链接 : https://leetcode.cn/problems/word-ladder

    ================================================

    题目2
    零食问题 & 世界冰球锦标赛
    牛牛准备参加学校组织的春游, 出发前牛牛准备往背包里装入一些零食, 牛牛的背包容量为w
    牛牛家里一共有n袋零食, 第i袋零食体积为v[i]
    牛牛想知道在总体积不超过背包容量的情况下
    一共有多少种零食放法(总体积为0也算一种放法)
    数据量描述:
    1 <= n <= 40, 1 <= w <= 2 * 10^9, 0 <= v[i] <= 10^9
    测试链接 : https://www.nowcoder.com/practice/d94bb2fa461d42bcb4c0f2b94f5d4281
    测试链接 : https://www.luogu.com.cn/problem/P4799

    ================================================

    题目3
    最接近目标值的子序列和
    给你一个整数数组 nums 和一个目标值 goal
    你需要从 nums 中选出一个子序列，使子序列元素总和最接近 goal
    也就是说，如果子序列元素和为 sum ，你需要 最小化绝对差 abs(sum - goal)
    返回 abs(sum - goal) 可能的 最小值
    注意，数组的子序列是通过移除原始数组中的某些元素（可能全部或无）而形成的数组。
    数据量描述:
    1 <= nums.length <= 40
    -10^7 <= nums[i] <= 10^7
    -10^9 <= goal <= 10^9
    测试链接 : https://leetcode.cn/problems/closest-subsequence-sum

*/